package com.study.polymorphism2;

public class Test {
    public static void main(String[] args) {
        //搞懂多态的好处
        //多态下右边的对象是解耦合的
        Animal cat = new Cat();
        go(cat);
        Animal dog = new Dog();
        go(dog);
        System.out.println("--------------------------------");
        //多态的问题：不能直接调用子类独有的功能，可以先强制类型转换再使用
//        cat.catchFish();
        Cat cat2 = (Cat) cat;
        cat2.catchFish();
        //避免强制类型转换错误classcastexception，建议这样写
        if(cat instanceof Cat){
            Cat cat3 = (Cat) cat;
        }else{
            Dog dog2 = (Dog)cat;
        }
    }
    //多态下，父类类型作为方法的形参，可以接受一切子类对象，方法更便利
    public static void go(Animal animal){
        System.out.println("看好了");
        animal.cry();
        System.out.println("结束");
    }
}
